package com.ht.cdc;

import java.util.ArrayList;
import java.util.List;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

/**
 * mysql数据源的cdc配置
 * @author asq
 * @createTime 2025年3月9日 13:31:33
 */
@Data
@Builder
@AllArgsConstructor
public class CdcConfig {
	/** 状态：正常 */
	public static final int NORMAL = 1;
	/** 状态：停用 */
	public static final int DISABLE = -1;
	
    /** 主机IP */
    private String hostname;
    /** 用户名 */
    private String username;
    /** 密码 */
    private String password;
    /** 端口 */
    private int port;
    /** 数据库名称 */
    private String database;
    /** 要同步的表名 */
    private JSONArray table;
    
    /**
     * 构造cdcConfig
     * @param config 数据源配置
     * @return
     */
    public static CdcConfig create(JSONObject config) {
		CdcConfig cdcConfig = CdcConfig.builder()
				.hostname(config.getStr("hostname"))
				.username(config.getStr("username"))
				.password(config.getStr("password"))
				.port(config.getInt("port"))
				.database(config.getStr("database"))
				.table(config.getJSONArray("table"))
				.build();
		return cdcConfig;
    }
    
    /**
     * 返回要同步的表名数组<br>
     * 如果要同步所有表，则格式为：["database.*"] <br>
     * 如果要同步指定表，则格式为：["database.table1","database.table2"] 
     * @return
     */
	public String[] getTableList() {
		List<String> tableList = new ArrayList<>();
		
		table.stream().forEach(t -> {
			tableList.add(String.format("%s.%s", database, t));
		});
		
		return tableList.toArray(new String[0]);
	}
}
